package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.mail.Address;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import muhnes.sizoo.util.Utilidades;

/**
 * Clase donde se definen los metodos para el envio de correo electronico 
 * @author Nelson Chicas
 */
@ManagedBean(name = "correoBean")
@ViewScoped
public class CorreoBean implements Serializable {
    
    @Resource(name = "mail/Sizoo")
    private Session sesionCorreo;
    
    private String correoAdministracion;
    private String correoSoporte;
    private String correoContacto;
    private String remitente;
    private String correo;
    private String asunto;
    private String contenido;

    public CorreoBean() {
    }
    
    public String getRemitente() {
        return remitente;
    }

    public void setRemitente(String remitente) {
        this.remitente = remitente;
    }

    public String getCorreo() {
        return correo;
    }
    
    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getAsunto() {
        return asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public String getContenido() {
        return contenido;
    }

    public void setContenido(String contenido) {
        this.contenido = contenido;
    }
    
    public String getCorreoAdministrador() {
        if( correoAdministracion == null ) {
            correoAdministracion = (String)Utilidades.obtenerParametro( "correo-administracion" );
        }
        return correoAdministracion;
    }

    public String getCorreoSoporte() {
        if( correoSoporte == null ) {
            correoSoporte = (String)Utilidades.obtenerParametro( "correo-soporte" );
        }
        return correoSoporte;
    }

    public String getCorreoContacto() {
        if( correoContacto == null ) {
            correoContacto = (String)Utilidades.obtenerParametro( "correo-contacto" );
        }
        return correoContacto;
    }
    
    public void enviarCorreo( String destinatario ) {
        
        boolean envioExitoso = false;
        Transport transmisor = null;
        
        try {
            MimeMessage mensaje = new MimeMessage( sesionCorreo );
            Address direccion = new InternetAddress( destinatario );
            mensaje.setRecipient( RecipientType.TO, direccion );
            mensaje.setSubject( asunto );
            mensaje.setText( "Correo enviado por: " + remitente 
                             + "\nContacto: " + correo
                              + "\n\n" + contenido );
            mensaje.saveChanges();
            transmisor = sesionCorreo.getTransport();
            String serverPassword = sesionCorreo.getProperty("mail.password");
            transmisor.connect(null, serverPassword);
            transmisor.sendMessage( mensaje, mensaje.getAllRecipients() );
            
            envioExitoso = true;
        }
        catch (MessagingException ex) {
            Logger.getLogger(CorreoBean.class.getName()).log(Level.SEVERE, null, ex);
        }               
        finally {
            try {
                if( transmisor != null && transmisor.isConnected() ) {
                    transmisor.close();
                }
            } catch (MessagingException ex) {
                Logger.getLogger(CorreoBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }

}


